基于Netty的ModbusRtu和云服务器(java)通讯 |
您所在的位置:网站首页 › netty golang › 基于Netty的ModbusRtu和云服务器(java)通讯 |
上篇讲了 modbus协议 的基础。今天说下问题的场景及过程的困扰,断断续续历时个把月才把问题解决。 场景(农污):站点分散分布在农村,不具备有线网络。每站点现场通过 PLC 接现场设备,比如泵、 液位计 、 鼓风机 等设备,然后plc接 Dtu 进行4G数据传输, dtu是透传 , 云服务器 接受数据并进行设备数据的显示及反控。 关键词: modbus RTU over TCP (伪) , modbusrtu Netty 困扰过程:由于开始对modbus不熟悉,理解有大的误差,关键一点就是 从机只等待主机发送信息再回复,从机就是现场的PLC设备。在这一点,一直理解有误 。另外此问题据我理解根本 不是modbus rtu over tcp方向也偏了 。另外一点是本想通过 modbus的成熟中间件去解决,但都行不通 。 在此我借用一张图便于理解场景:
关键思路: dtu发送心跳,建立长连接,然后云服务器向从机发送指令,从机回复消息 ,这是明显modbusrtu通过4G进行数据传输,而不是通过modbus rtu over tcp。 关于通讯我选择了 netty ,基于springboot建立了通讯程序。下面我们先说说netty。 一、 选择netty Netty是一个 Java NIO技术的开源异步事件驱动的高性能网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。往通俗了讲,可以将Netty理解为:一个将 Java NIO 进行了大量封装,并大大降低Java NIO使用难度和上手门槛的超牛逼框架。 Netty的主要组件及概念: 1)I/O:各种各样的流(文件、数组、缓冲、管道。。。)的处理(输入输出); 2)Channel:通道,代表一个连接,每个Client请对会对应到具体的一个Channel; 3)ChannelPipeline:责任链,每个Channel都有且仅有一个ChannelPipeline与之对应,里面是各种各样的 Handler ; 4)handler:用于处理出入站消息及相应的事件,实现我们自己要的业务逻辑; 5)EventLoopGroup:I/O线程池,负责处理Channel对应的I/O事件; 6)ServerBootstrap:服务器端启动辅助对象; 7) Bootstrap :客户端启动辅助对象; 8)ChannelInitializer:Channel初始化器; 9)ChannelFuture:代表I/O操作的执行结果,通过事件机制,获取执行结果,通过添加监听器,执行我们想要的操作; 10)ByteBuf:字节序列,通过ByteBuf操作基础的字节数组和缓冲区。 二、 基于 spring boot的netty 基于spring boot有netty有四种启动方式。 a.注解@PostConstruct b.利用监听器启动 c.利用 Application Listener 上下文监听器 d.commiandLinerunner启动 本次项目选用的注解@PostConstruct。 三、 modbus中间件 java版的modbus中间件有不少。介绍如下: Jamod:Java Modbus实现:Java Modbus库。该库由Dieter Wimberger实施。 ModbusPal:ModbusPal是一个正在进行的Java项目,用于创建逼真的Modbus从站模拟器。由于预定义的 数学函数 和/或 Python 脚本, 寄存器 值是动态生成的。ModbusPal依赖于RxTx进行串行通信,而Jython则依赖于脚本支持。 Modbus4J:Serotonin Software用Java编写的Modbus协议的高性能且易于使用的实现。支持 ASCII ,RTU,TCP和 UDP 传输作为从站或主站,自动请求分区,响应数据类型解析和节点扫描。 JLibModbus:JLibModbus是java语言中Modbus协议的一种实现。jSSC和RXTX用于通过 串行端口 进行通信。该库是一个经过积极测试和改进的项目。 项目开始时我也modbus4j进行了测试,不过由于项目采用dtu透传,所以并不适合。最终还是使用的netty。 四、 关键代码 项目开始时我也modbus4j进行了测试,不过由于项目采用dtu透传,所以并不适合。最终还是使用的netty。 Netty启动:
数据读取及处理:
以上代码解读: (1)Dtu发送心跳,建立连接 (2)根据业务,服务器发送读取指令 (读取) (3)服务器处理响应指令,并对数据进行处理 (反控) 通过界面按钮触发反控指令:
五、 调试工具 Modbus学习必备的三大神器分别是Modbus Poll、Modbus Slave及VSPD。 Modbus Poll软件主要用于仿真Modbus主站或Modbus客户端。 Modbus Slave软件主要用于仿真Modbus从站或Modbus服务器。 VSPD全称Configure Virtual Serial Port Driver,是用来给电脑创建虚拟串口使用的。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |